<?php

namespace Modules\Chinadmin\Services;


use JPush\Client as JPush;
use Modules\Chinadmin\Models\AccountModel;

/**
 * 极光推送服务
 */
class JPushServices
{

    static $app_key = "b1123e0d781974e347f84433";
    static $master_secret = 'adfd32f51cc356b71240b6ee';

    static $app_key_driver = "5c5429f2cd67d13131ac5613";
    static $master_secret_driver = '1272c1e492f080c872b7f383';

    public function __construct(){

    }

    /**
     * 消息广播
     */
    static public function broadcast($msg = 'Hello, JPush'){

        $client = new JPush(self::$app_key,self::$master_secret);

        $pusher = $client->push();
        $pusher->setPlatform('all');
        $pusher->addAllAudience();
        $pusher->setNotificationAlert($msg);
        try{

            $re = $pusher->send();

//            print_r($re);
//            exit;

            return $re;

        }catch(\JPush\Exceptions\JPushException $e){
            // try something else here
            print_r($e);
        }

    }

    /**
     * 发给某个人
     */
    static public function send($registration_id = '1a0018970a0c8821b0c',$title = "您有新的订单",$extras,$type = 1){

        //$type 是 1 是 调度端的 推送 0是司机端的推送
        if($type){
            $client = new JPush(self::$app_key,self::$master_secret);
        }else{
            $client = new JPush(self::$app_key_driver,self::$master_secret_driver);
        }

        //print_r($registration_id);exit;

        // 完整的推送示例
        try{

            //print_r($title);exit;

            $response = $client->push()
                ->setPlatform(array('ios','android'))
                //->setPlatform(array('android'))
                // 一般情况下，关于 audience 的设置只需要调用 addAlias、addTag、addTagAnd  或 addRegistrationId
                // 这四个方法中的某一个即可，这里仅作为示例，当然全部调用也可以，多项 audience 调用表示其结果的交集
                // 即是说一般情况下，下面三个方法和没有列出的 addTagAnd 一共四个，只适用一个便可满足大多数的场景需求

                //->addAlias('alias')
                //->addTag(array('tag1', 'tag2'))

                ->addRegistrationId($registration_id)
                //->addAllAudience()

                ->setNotificationAlert($title)
                ->iosNotification($title,array(
                    'sound' => 'sound.caf',
                    // 'badge' => '+1',
                    // 'content-available' => true,
                    // 'mutable-content' => true,
                    'category' => 'jiguang',
                    'extras' => $extras,
                ))
                ->androidNotification($title,array(
                    'title' => $title,
                    // 'builder_id' => 2,
                    'extras' => $extras,
                ))
                ->message($title,array(
                    'title' => $title,
                    // 'content_type' => 'text',
                    'extras' => $extras,
                ))
                ->options(array(
                    // sendno: 表示推送序号，纯粹用来作为 API 调用标识，
                    // API 返回时被原样返回，以方便 API 调用方匹配请求与返回
                    // 这里设置为 100 仅作为示例

                    // 'sendno' => 100,

                    // time_to_live: 表示离线消息保留时长(秒)，
                    // 推送当前用户不在线时，为该用户保留多长时间的离线消息，以便其上线时再次推送。
                    // 默认 86400 （1 天），最长 10 天。设置为 0 表示不保留离线消息，只有推送当前在线的用户可以收到
                    // 这里设置为 1 仅作为示例

                    // 'time_to_live' => 1,

                    // apns_production: 表示APNs是否生产环境，
                    // True 表示推送生产环境，False 表示要推送开发环境；如果不指定则默认为推送开发环境

                    'apns_production' => false,

                    // big_push_duration: 表示定速推送时长(分钟)，又名缓慢推送，把原本尽可能快的推送速度，降低下来，
                    // 给定的 n 分钟内，均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
                    // 这里设置为 1 仅作为示例

                    // 'big_push_duration' => 1
                ))->setSmsMessage(array(
                    'delay_time' => 60,
                    'signid' => 154,
                    'temp_id' => 1,
                    'temp_para' => array(
                        'code' => 357
                    ),
                    'active_filter' => false
                ))->send();

            //print_r($response);exit;
            //print_r($response);
            return $response;

        }catch(\JPush\Exceptions\APIConnectionException $e){
            // try something here
            print $e;
        }catch(\JPush\Exceptions\APIRequestException $e){
            // try something here
            print $e;
        }


    }

    /**
     * 发送消息
     */
    static public function toSend($cases_id,$driver_id,$title,$type){

        if(isset($driver_id)){
            $AccountModel = AccountModel::where("employee_id",$driver_id)->first();
            if(!empty($AccountModel['registration_id'])){
                $msg = [
                    "type" => $type,                         //给到前端判断的值
                    "msg" => $title,
                    "cases_id" => $cases_id                  //通知订单信息，受理以后是案件，不受理就只是个订单。
                ];
                //d($AccountModel['registration_id']);
                $re = JPushServices::send($AccountModel['registration_id'],$title,$msg,0);

                return $re;

            }
        }
        return 0;
    }




}
